TiDB Cloudに対して、プライベートサブネットのEC2からsysbenchで負荷テストをする環境を構築してみた
こんにちは、ゲームソリューション部のsoraです。
今回は、TiDB Cloudに対して、プライベートサブネットのEC2からsysbenchで負荷テストをする環境を構築してみたことについて書いていきます。
はじめに
今回構築する構成は以下です。
プライベートサブネットにあるEC2からTiDB CloudのDedicatedクラスタにVPCピアリングで接続して、DB接続・sysbenchの実行ができるようにします。
流れとしては以下です。
- AWS環境構築1(VPCの作成)
- VPCピアリング接続の作成
- AWS環境構築2(VPC以外の作成)
- TiDB Cloudでのクラスタ作成・接続準備
- EC2へのsysbenchのインストール
- TiDB CloudのDedicatedクラスタへの接続・sysbenchの実行
AWS環境構築1(VPCの作成)
TiDB Cloudと接続するVPCを作成します。
構成図の通り、Private SubnetとPublic Subnetが1つずつあれば良いです。
VPCピアリング接続の作成
以下のTiDB Cloud公式ドキュメントを参考に設定していきます。
TiDB CloudのProject Settingsにて、先ほど作成したVPCの情報を元にVPCピアリング接続を作成します。
AWSにてVPCピアリング接続が承認待ちの状態になっているため承認してアクティブにします。
その後、TiDB Cloudへ接続するためのルートを、プライベートサブネットのルートテーブルに追加します。
送信先としてTiDB CloudのVPC CIDRを入れて、ターゲットにはピアリングIDを入れます。
どちらのパラメータもTiDB CloudのVPCピアリングの設定画面で確認できます。
AWS環境構築2(VPC以外の作成)
EC2インスタンスをプライベートサブネットに作成して、EC2 Instance Connectで接続するためのエンドポイントも作成します。
EC2インスタンスにてsysbenchをインストールするときにEPELを利用する必要があるため、NAT Gatewayも作成します。
このNAT Gatewayはsysbenchインストール後に削除しても問題ありません。
今回、TiDB CloudとはVPCピアリングで接続しますが、TLSを使ってパブリック接続する場合は、EC2インスタンスにTiDB CloudクラスタのCA証明書を配置する必要があります。
その場合は、EC2インスタンスにS3バケット経由でCA証明書を配置するなどしてください。
TiDB Cloudでのクラスタ作成・接続準備
TiDB CloudにてDedicatedクラスタを作成します。
クラスタが作成できアクティブになったら、クラスタへ接続するための情報を取得します。
Connect
ボタンの横の・・・
のSecurity Settings
からパスワードを作成します。
IP Access Listについては、初期状態で全て拒否になっていますが、今回はVPCピアリング接続のため初期状態のままでも接続できます。(パブリック接続の場合は許可設定が必要)
次にConnect
ボタンにて、接続するためのコマンド(またはコード)を確認します。
TLSを使ってパブリック接続する場合は、CA証明書をダウンロードして接続元のEC2インスタンスに配置する必要があります。
EC2へのsysbenchのインストール
大枠の環境構築は完了したため、次にEC2へsysbenchをインストールします。
Amazon Linux 2023ではEPELがサポートされていないため、今回はAmazon Linux 2を使用します。
sysbenchを実行するだけであれば不要ですが、TiDB Cloudのクラスタへ接続するためにmysqlをインストールします。
# 初期状態で入っているMariaDBの削除(干渉を防ぐため)
sudo yum remove -y mariadb-*
# MySQLのインストール
# ※バージョンは、https://dev.mysql.com/downloads/repo/yum/ を参考にする
sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
sudo yum install -y --enablerepo=mysql80-community mysql-community-server
sudo yum install -y --enablerepo=mysql80-community mysql-community-devel
# インストール後のバージョン確認
mysql --version
次にsysbenchをインストールします。
# sysbenchのインストール
sudo amazon-linux-extras install epel
sudo yum -y install sysbench
# インストール後のバージョン確認
sysbench --version
TiDB CloudのDedicatedクラスタへの接続・sysbenchの実行
環境構築と設定が完了したため、TiDB Cloudのクラスタへの接続とsysbenchの実行ができるか確認します。
まずはMySQL CLIでの接続から
# ※コマンドはTiDB CloudのConnectボタンから確認可能
$ mysql --comments --connect-timeout 15 -u root -h private-tidb.xxxxxxxx.clusters.tidb-cloud.com -P 4000 -D test -p<パスワード>
mysql: [Warning] Using a password on the command line interface can be insecure.
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1665162568
Server version: 8.0.11-TiDB-v7.5.2 TiDB Server (Apache License 2.0) Enterprise Edition, MySQL 8.0 compatible
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql> exit
Bye
次にsysbenchを使ってみます。
HOST
やPASSWORD
の部分は、クラスタ接続時のコマンドから確認できます。
sysbenchが実行できるかどうか見たいだけなので、オプションなどは適当です。
sysbench oltp_common \
--threads=4 \
--db-driver=mysql \
--mysql-db=test \
--mysql-host={HOST} \
--mysql-port=4000 \
--mysql-user=root \
--mysql-password={PASSWORD} \
prepare --tables=4 --table-size=10
ちなみに、設定値をconfigファイルに外出しして実行することも可能みたいです。
mysql-host={HOST}
mysql-port=4000
mysql-user=root
mysql-password={PASSWORD}
mysql-db=test
time=600
threads=16
report-interval=10
db-driver=mysql
sysbench --config-file=/path/to/your/config.file <test> <options>
実行してみると、TiDB Cloud上のメトリクスも動いており、テストが実行されていることが確認できました。
参考ページ
sysbench導入まで
sysbench使用について
最後に
今回は、TiDB Cloudに対して、プライベートサブネットのEC2からsysbenchで負荷テストをする環境を構築してみたことを記事にしました。
どなたかの参考になると幸いです。